﻿#ifndef DVB_H_INC
#define DVB_H_INC

/*
  Copyright (c) 2010~2021 Langjie Testing Co. Ltd.
  本源代码知识版权属于杭州朗杰测控技术开发有限公司，www.langjie.com
  
  在满足以下条件下，朗杰公司允许任何人（开发者）免费复制到其C/C++工程，编译生成应用软件：
  1> 朗杰公司保留修改权，开发者必须完整复制。
  2> 生成可执行的应用软件必须与朗杰公司控制器一同使用。
  3> 不得擅自以源文件形式散发到第三方。即，任何开发者获得本文件必须直接来自朗杰公司。
  4> 其它编译语言版本必须经过朗杰公司测试通过并另行授权。

  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
  THE SOFTWARE.
*/

#define WIN32_LEAN_AND_MEAN
#include <windows.h>

// DVB = Digital Value in BCD, 数值码
// IDR = Integer of Decimal Resolution, 分辨数
// BCD = Binary Coded Decimal‎
#ifndef DVB_DEF
#define DVB_DEF
typedef DWORD DVB;
typedef long IDR;
typedef WORD BCD;
#endif

#define NEGABIT		0x80000000			// 最高为作为负数标志
#define EODVB		0x80000000			// DVB数组结束标志
#define IDRRANGE	10000000			// IDR范围
#define MAXIDR		(IDRRANGE-1)
#define MINIDR		(1-IDRRANGE)
#define DVB_BUF_SIZE	10				// 建议存放单个DVB字符串的缓存区大小		

#ifdef __cplusplus
extern "C"
{
#endif
	
BOOL DvbIsPositive(DVB dv);
BOOL DvbIsInteger(DVB dv);
int  DotOfDvb(DVB dv);
long Dvb2Int(DVB dv);
DVB  Int2Dvb(long iv);
double Dvb2Float(DVB dv);
DVB  Float2Dvb(double fv, int dot);
DVB  FreeFloat2Dvb(double fv);
DVB  ValidFloat2Dvb(double fv, int wd);
void Dvb2String(char strBuf[], DVB dv);
DVB  String2Dvb(const char* str);

DVB  DvbAbs(DVB dv);
DVB DvbNega(DVB dv);
DVB  DvbReform(DVB dv, int dot);
int  DvbCompare(DVB dv1, DVB dv2);
DVB  DvbMin(DVB dv1, DVB dv2);			// 针对相同格式的DVB比较
DVB  DvbMax(DVB dv1, DVB dv2);

IDR Float2Idr(double fv, int dot);
double Idr2Float(IDR idr, int dot);
IDR Dvb2Idr(DVB dv);
DVB Idr2Dvb(IDR idr, int dot);
DVB DvbInc(DVB dv, IDR idr);
IDR DvbMinus2Idr(DVB dv1, DVB dv2);

BCD  Int2Bcd(int iv);
int  Bcd2Int(BCD bcd);
void Bcd2String(char strBuf[], BCD bcd);
BCD  String2Bcd(const char* str);

#ifdef __cplusplus
}
#endif

#endif // DVB_H_INC
